import Vue from 'vue'
import axios from 'axios'
// import iView from 'iview'
import router from '@/router/index'
import { getToken,setToken } from '@/libs/util'
import config from '@/config'
// Vue.use(iView)
Vue.prototype.$axios = axios
const urlArray={
    development:{
        adminUrl:'http://39.98.246.90',
        picView:'http://39.98.246.90:8081/platIMG'
    },
    uat:{
        adminUrl:'http://39.98.246.90',
        picView:'http://39.98.246.90:8081/platIMG'
    },
    production:{
        adminUrl:'http://39.98.246.90',
        picView:'http://39.98.246.90:8081/platIMG'
    }
}
// 权限管理系统
export const adminUrl =urlArray['development'].adminUrl;
export const picView=urlArray['development'].picView;
console.log(adminUrl)
var instance = axios.create({
  timeout: 50000
})
// axios 响应拦截
instance.interceptors.response.use(function (response) {
  return response
}, function (error) {
  if (error.response.status == 404) { // 找不到数据接口
    router.push({ name: 'error_404' })
  }
  if (error.response.status == 500) { // 服务器错误
    router.push({ name: 'error_500' })
  }
  if (error.response.status == 403) { // 暂无操作权限
    router.push({ name: 'error-403' })
  }
  if (error.response.status == 401) { // token过期
    setToken('');
    localStorage.removeItem('tagNaveList');
    new Vue().$Message.warning({
      content: '会话过期，请重新登录',
      duration: 2,
      onClose: function () {
        router.push({ name: 'login' })
      }
    })
  }
  return Promise.reject(error)
})
// axios中的get请求
export function fetchGetData (url, params) {
  setHeaderToken()
  return new Promise((resolve, reject) => {
    instance.get(url, { params: params })
      .then(function (res) {
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
};
// axios中的post请求
export function fetchPostData (url, params,config) {
  setHeaderToken()
  // iView.LoadingBar.start()
  return new Promise((resolve, reject) => {
    instance.post(url, params,config)
      .then(function (res) {
        // iView.LoadingBar.finish()
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
}
export function fetchPostExportData (url, params) {
  setHeaderToken()
  // iView.LoadingBar.start()
  return new Promise((resolve, reject) => {
    instance.post(url, params,{responseType: 'blob'})
      .then(function (res) {
        // iView.LoadingBar.finish()
        if (res.status >= 200 && res.status < 300) {
          return resolve(res)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
}
// axios中的delete请求
export function fetcDeleteData (url, params) {
  setHeaderToken()
  return new Promise((resolve, reject) => {
    instance.delete(url, params)
      .then(function (res) {
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
};
// axios中的patch请求
export function fetcPatchData (url, params) {
  setHeaderToken()
  return new Promise((resolve, reject) => {
    instance.patch(url, params)
      .then(function (res) {
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
};
// axios中的patch请求
export function fetcPutData (url, params) {
  setHeaderToken()
  return new Promise((resolve, reject) => {
    instance.put(url, params)
      .then(function (res) {
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
};

export function delTokenFetchGetData (url, params) {
  delHeaderToken()
  return new Promise((resolve, reject) => {
    instance.get(url, { params: params })
      .then(function (res) {
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
};

export function delTokenFetchPostData (url, params) {
    delHeaderToken()
  // iView.LoadingBar.start()
  return new Promise((resolve, reject) => {
    instance.post(url, params)
      .then(function (res) {
        // iView.LoadingBar.finish()
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
}
export function delTokenFetchPatchData (url, params) {
    delHeaderToken()
  return new Promise((resolve, reject) => {
    instance.patch(url, params)
      .then(function (res) {
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
}
export function delTokenFetchPutData (url, params) {
   delHeaderToken()
  return new Promise((resolve, reject) => {
    instance.put(url, params)
      .then(function (res) {
        if (res.status >= 200 && res.status < 300) {
          return resolve(res.data)
        } else {
          return reject(new Error(res.status))
        }
      })
      .catch(function (err) {
        console.log(err)
      })
  })
}

function setHeaderToken () {
  let tokenVal = getToken()
  if (tokenVal) {
    instance.defaults.headers.common['token'] = tokenVal
  }
}

function delHeaderToken () {
  delete instance.defaults.headers.common['token']
}
